/*
 * zachlib.h
 *
 *   Created on: 2011-9-23
 *       Author: 左白
 *  Description: zach所使用模块无关工具
 */
#include <iostream>
#include <map>
#include "zach.h"
#include "parse.h"

#ifndef ZACHLIB_H_
#define ZACHLIB_H_

namespace zach
{
namespace util
{

#if (1) /* 文本处理 */
// 从一个流中读取UTF-32字符,总假定绑定的流使用UTF-8编码,以及CR-LF换行
class UTF8Reader
{
public:
	UTF8Reader();
	~UTF8Reader();

	// 操作,将Reader绑定到一个流上
	void init( string path );

	// 操作,读一个UTF8字符
	void readChar();

	// 属性,刚读到的UTF32字符
	Char lastRead() const;

	// 属性,刚读到的字符的位置
	TextPosition position() const;

	// 属性,文件是否结束
	bool isEnd() const;

private:
	TextPosition _position;
	std::istream* _in;
	Char _present;
};

// 字符串构建器
class StringBuilder
{
public:
	// 操作,追加一个字符
	void pushChar( Char c );

	// 操作,追加一组字符
	void pushChars( const CharVector& chars );

	// 操作,构建字符串
	void build();

	// 属性,返回上次构建的结果
	String lastBuild() const;

private:
	CharVector _buffer; // 缓冲
	String _lastBuild; // 构建结果
};
#endif /* 文本处理 */

#if (1) /* 字符串连接 */
inline string concat( string str1, string str2 )
{
	return str1 + str2;
}

inline string concat( string str, Char c )
{
	return concat( str, toString( c ) );
}

inline string concat( string str1, String str2 )
{
	return concat( str1, toString( str2 ) );
}
#endif /* 字符串连接 */

}
}

#endif /* ZACHLIB_H_ */
